﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; 
using MyHotel.MyHotel_MHLapDanhMucPhong_BUS_Webservice; 

namespace MyHotel
{
    public partial class frmDanhMucPhong : MyForm
    {
        public delegate void ThemPhong(Phong p);
        public delegate void SuaPhong(Phong p);
        public delegate void XoaPhong(Phong p);
        public event ThemPhong ThemPhong_event;
        public event SuaPhong SuaPhong_event;
        public event XoaPhong XoaPhong_event;

        private enum TrangThai { BinhThuong, Them, Sua };
        private TrangThai _trangthai;
        private bool _isEdit = false;
        private int _idRowCurrent = 0; 
        private int _maphong;
        MHLapDanhMucPhongBUSWSSoapClient ws = new MHLapDanhMucPhongBUSWSSoapClient();

        public frmDanhMucPhong()
        {
            InitializeComponent();
        }

        public override MyForm Clone()
        {
            return new frmDanhMucPhong();
        }

        public override string getName()
        {
            return "frmDanhMucPhong";
        }
 
        private void frmDanhMucPhong_Load(object sender, EventArgs e)
        { 
            cboLoaiPhong.DisplayMember = "TenLoai";
            cboLoaiPhong.ValueMember = "MaLoai";
            cboLoaiPhong.DataSource = ws.getListLoaiPhong();
            LoadDanhSachDanhMucPhong();
        }

        private void LoadDanhSachDanhMucPhong()
        {
            Danhmucphong [] list = ws.getDanhSachDanhMucPhong();
            dgvDanhMucPhong.DataSource = CreateDataTableFromListDanhMucPhong(list);
        }

        private DataTable CreateDataTableFromListDanhMucPhong(Danhmucphong[] list)
        {
            DataTable table = new DataTable();
            table.Columns.Add("MaPhong", typeof(string));
            table.Columns.Add("TenPhong", typeof(string));
            table.Columns.Add("LoaiPhong", typeof(string));
            table.Columns.Add("DonGia", typeof(string));
            table.Columns.Add("GhiChu", typeof(string));

            foreach (Danhmucphong dmp in list)
            {
                DataRow row = table.NewRow();
                row["MaPhong"] = dmp.MaPhong;
                row["TenPhong"] = dmp.Tenphong;
                row["LoaiPhong"] = dmp.Loaiphong;
                row["DonGia"] = dmp.Dongia;
                row["GhiChu"] = dmp.Ghichu;

                table.Rows.Add(row);
            }

            return table;
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void setTrangThai(TrangThai tt)
        {
            _trangthai = tt;
            switch (tt)
            {
                case TrangThai.BinhThuong:
                    groupPanelThongTin.Enabled = false;
                    groupPanelCtrl.Enabled = true;
                    break;
                case TrangThai.Them:
                    groupPanelThongTin.Enabled = true;
                    groupPanelCtrl.Enabled = false;
                    break;
                case TrangThai.Sua:
                    groupPanelThongTin.Enabled = true;
                    groupPanelCtrl.Enabled = false;
                    break;
                default:
                    break;
            }
        }

        public void hienLenTextBox()
        {
            if (dgvDanhMucPhong.Rows.Count != 0)
            { 
                txtTenPhong.Text = dgvDanhMucPhong.CurrentRow.Cells["TenPhong"].Value.ToString();
                txtGhiChu.Text = dgvDanhMucPhong.CurrentRow.Cells["GhiChu"].Value.ToString();
                txtDonGia.Text = dgvDanhMucPhong.CurrentRow.Cells["DonGia"].Value.ToString();
                cboLoaiPhong.Text = dgvDanhMucPhong.CurrentRow.Cells["LoaiPhong"].Value.ToString();
             }
            else
            {
                txtTenPhong.Text = String.Empty;
                txtGhiChu.Text = String.Empty;
                txtDonGia.Value = 0;
                cboLoaiPhong.Text = String.Empty;
            }
        }

        private void dgvDanhMucPhong_CurrentCellChanged(object sender, EventArgs e)
        {
            if (dgvDanhMucPhong.CurrentRow != null)
            {
                hienLenTextBox();
            }
        }  
        
        private void btnNhapMoi_Click(object sender, EventArgs e)
        {
            txtTenPhong.Text = String.Empty;
            txtGhiChu.Text = String.Empty; 
        } 

        private void cboLoaiPhong_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboLoaiPhong.SelectedIndex >= 0)
            {
                int dongia = ws.getLoaiPhongbyMaLoai(int.Parse(cboLoaiPhong.SelectedValue.ToString())).DonGia;
                txtDonGia.Text = string.Format("{0,0}", dongia);
            } 
        }  

        private void btnXoa_Click(object sender, EventArgs e)
        { 
            DialogResult dr = MessageBox.Show("Bạn có chắc chắn muốn xóa dòng này không?", "Hướng dẫn", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
            if (dr == System.Windows.Forms.DialogResult.Yes)
            {
                int dong = dgvDanhMucPhong.CurrentRow.Index;
                Phong phong = new Phong();
                phong.MaPhong = Convert.ToInt32(dgvDanhMucPhong.Rows[dong].Cells["maphong"].Value.ToString());
                phong.TenPhong = txtTenPhong.Text;
                phong.LoaiPhong = Int32.Parse(cboLoaiPhong.SelectedValue.ToString());
                phong.GhiChu = txtGhiChu.Text;

                bool result = ws.xoaPhong(phong);
                if (result == true)
                {
                    MessageBox.Show("Xóa Thành công!", "Xóa", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LoadDanhSachDanhMucPhong();
                    if (XoaPhong_event != null)
                    {
                        XoaPhong_event(phong);
                    }
                }
                else
                {
                    MessageBox.Show("Thất bại!\r\nPhòng đang được thuê. Vui lòng chờ phòng được trả mới có thể xóa được.", "Xóa", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }

        private bool IsDataOK(bool showAlert = false)
        {
            if (txtTenPhong.Text.Trim() == String.Empty)
            {
                if (showAlert)
                {
                    MessageBox.Show("Vui lòng điền tên phòng!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                txtTenPhong.Focus(); 
                return false;
            }
            if (cboLoaiPhong.SelectedIndex < 0)
            {
                if (showAlert)
                {
                    MessageBox.Show("Vui lòng chọn loại phòng!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                cboLoaiPhong.Focus();
                return false;
            } 
            if (txtDonGia.Text.Trim() == String.Empty)
            {
                if (showAlert)
                {
                    MessageBox.Show("Vui lòng điền đơn giá!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                txtDonGia.Focus(); 
                return false;
            }

            return true;
        }

        private void btnKhongLuu_Click(object sender, EventArgs e)
        {
            switch (_trangthai)
            {
                case TrangThai.Them:
                    Them_KhongLuu();
                    break;
                case TrangThai.Sua:
                    Sua_KhongLuu();
                    break;
            }

            hienLenTextBox(); 
        }

        private void Them_KhongLuu()
        {
            if (IsDataOK())
            {
                DialogResult result = MessageBox.Show("Nhân viên này sẽ không được thêm, bạn có chắc không!!!", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (result == DialogResult.Yes)
                {
                    setTrangThai(TrangThai.BinhThuong); 
                }
            }
            else
            {
                setTrangThai(TrangThai.BinhThuong);
            }
        }

        private void Sua_KhongLuu()
        {
            if (IsDataOK())
            {
                DialogResult result = MessageBox.Show("Thông tin Phòng sẽ không được cập nhật, bạn có chắc không!!!", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (result == DialogResult.Yes)
                {
                    setTrangThai(TrangThai.BinhThuong);
                }
            }
            else
            {
                setTrangThai(TrangThai.BinhThuong);
            }
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            switch (_trangthai)
            {
                case TrangThai.BinhThuong:
                    break;
                case TrangThai.Them:
                    Them_Luu();
                    break;
                case TrangThai.Sua:
                    Sua_Luu();
                    break;
                default:
                    break;
            }
        }

        private Phong getPhongFromForm()
        {
            Phong phong = new Phong();
            phong.MaPhong = this._maphong;
            phong.TenPhong = txtTenPhong.Text;
            phong.LoaiPhong = int.Parse(cboLoaiPhong.SelectedValue.ToString());
            phong.GhiChu = txtGhiChu.Text;

            return phong;
        }

        private void Them_Luu()
        {
            if (IsDataOK(true))
            {
                Phong p = getPhongFromForm(); 

                if (ws.themPhong(p))
                {
                    MessageBox.Show("Thêm phòng thành công!", "Lưu", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    setTrangThai(TrangThai.BinhThuong);
                    LoadDanhSachDanhMucPhong();
                    int count = dgvDanhMucPhong.Rows.Count;
                    dgvDanhMucPhong.CurrentCell = dgvDanhMucPhong[0, count - 1];

                    if (ThemPhong_event != null)
                    {
                        ThemPhong_event(p);
                    }
                }
                else
                {
                    MessageBox.Show("Thất bại!\r\nTên phòng đã được sử dụng. Vui lòng chọn tên khác.", "Thông báo");
                }
            }
        } 

        private void Sua_Luu()
        {
            if (IsDataOK(true))
            {
                Phong p = getPhongFromForm();

                if (ws.capNhatPhong(p))
                {
                    MessageBox.Show("Cập nhật phòng thành công!", "Lưu", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    setTrangThai(TrangThai.BinhThuong);
                    LoadDanhSachDanhMucPhong();
                    dgvDanhMucPhong.CurrentCell = dgvDanhMucPhong[0, _idRowCurrent];

                    if (SuaPhong_event != null)
                    {
                        SuaPhong_event(p);
                    }
                }
                else
                {
                    MessageBox.Show("Thất bại!\r\nTên phòng đã được sử dụng. Vui lòng chọn tên khác.", "Thông báo");
                }
            }
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            if (dgvDanhMucPhong.RowCount != 0)
            {
                setTrangThai(TrangThai.Sua); 
                 
                int dong = dgvDanhMucPhong.CurrentRow.Index;
                this._idRowCurrent = dong;
                this._maphong = Convert.ToInt32(dgvDanhMucPhong.Rows[dong].Cells["maphong"].Value.ToString());
            }
        } 

        private void btnThem_Click(object sender, EventArgs e)
        {
            setTrangThai(TrangThai.Them);

            txtTenPhong.Text = String.Empty;
            txtGhiChu.Text = String.Empty; 
            cboLoaiPhong.Text = String.Empty; 
        }   

        private void frmDanhMucPhong_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (this._isEdit)
            {
                DialogResult dr = MessageBox.Show("Bạn có muốn thoát không? ", "Thoát", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
                if (dr == DialogResult.No) 
                {
                    e.Cancel = true;
                }
            }  
        } 

        private void dgvDanhMucPhong_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            //for (int i = 0; i < dgvDanhMucPhong.Rows.Count; i++)
            //    dgvDanhMucPhong.Rows[i].Cells[0].Value = i + 1;
        }

        private void btnThemLoaiPhong_Click(object sender, EventArgs e)
        {
            frmThemLoaiPhong frm = new frmThemLoaiPhong();
            frm.Show();
        }

        
    }
}